package DesignPattern.template;

/**
 * @Author self
 * @Date 2025/7/12 15:46
 * @Describe
 */
// 抽象类定义了游戏回合的基本流程
abstract class GameRound {
    // 模板方法，定义了游戏回合的基本流程
    public final void playRound() {
        prepareForTurn();
        executeTurn(); // 子类必须实现的方法
        finishTurn();
    }

    // 钩子方法，默认实现，子类可以选择性地重写
    protected void prepareForTurn() {
        System.out.println("Preparing for the turn...");
    }

    // 抽象方法，必须由子类实现
    protected abstract void executeTurn();

    // 钩子方法，默认实现，子类可以选择性地重写
    protected void finishTurn() {
        System.out.println("Finishing the turn...");
    }
}
